package cn.lycode.generator.mapper;

import cn.lycode.common.core.domain.entity.SysMenu;
import cn.lycode.generator.domian.dto.DbTableListDTO;
import cn.lycode.generator.domian.entity.GeneratorTable;
import cn.lycode.generator.domian.result.TableColumResult;
import cn.lycode.generator.domian.result.TableResult;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 代码生成业务表 Mapper 接口
 * </p>
 *
 * @author sz
 * @since 2023-11-27
 */
public interface GeneratorTableMapper {
    /**
     * 查询未导入的表
     */
    List<GeneratorTable> selectDbTableNotInImport(DbTableListDTO queryDTO);

    /**
     * 查询已经导入的表
     */
    List<GeneratorTable> selectDbTableByImport(DbTableListDTO queryDTO);

    /**
     * 查询指定table
     */
    List<TableResult> selectDbTableListByNames(List<String> tableNames);

    /**
     * 查询指定table的column列
     */
    List<TableColumResult> selectDbTableColumnsByName(String tableName);


    int insertGeneratorTable(GeneratorTable generatorTable);
    /**
     * 根据tableName清空表记录
     *
     * @param tableNames
     */
    void cleanTableRecordByTableName(@Param("tableNames") List<String> tableNames);

    /**
     * 根据tableName清空字段表
     *
     * @param tableNames
     */
    void cleanTableColumnByTableName(@Param("tableNames") List<String> tableNames);


    GeneratorTable selectGeneratorTableByName(String tableName);

    int countGeneratorTableById(Long tableId);
    GeneratorTable selectGeneratorTableById(Long tableId);

    int updateGeneratorTable(GeneratorTable generatorTable);
    /**
     * 根据pid 查询上级菜单
     *
     * @param pid
     * @return
     */
    int selectMenuCount(Long pid);

    SysMenu selectSysMenuByPid(Long pid);


//    void insertMenu(@Param("createDTO") MenuCreateDTO createDTO);



    void syncTreeHasChildren();

    void syncTreeDeep();

    /**
     * 菜单唯一性校验
     *
     * @param name
     * @param path
     * @param component
     * @return
     */
    int countMenu(@Param("name") String name, @Param("path") String path, @Param("component") String component, @Param("pid") String pid);

    /**
     * 按钮唯一性校验
     *
     * @param permissions
     * @return
     */
    int countMenuBtn(@Param("permissions") String permissions);



}
